ES6 新增 API 汇总
ES6 (2015) 到最新 ES2024
按时间段分类
shell
# 一、ES6(ES2015)—— 2015 年 6 月(里程碑大更新)
阶段跨度:2009(ES5)→2015,6 年大版本周期;此后改为每年 6 月发布 1 个小版本(ES2016+)。
核心新增 API / 特性:
1. 变量声明:let/const(块级作用域,无变量提升)
2. 箭头函数:()=>{}(无this绑定,简洁语法)
3. 模板字符串:`hello ${name}`(多行 + 变量插值)
4. 解构赋值:数组 / 对象解构、默认参数、剩余 / 扩展运算符(...)
5. 类与继承:class/extends/constructor(面向对象语法糖)
6. 模块化:import/export(浏览器 / Node 通用模块系统)
7. 异步:Promise(异步编程解决方案)
8. 数据结构:Symbol(唯一值类型)、Map/Set/WeakMap/WeakSet(新集合类型)
9. 迭代器与生成器:Iterator/Generator(function*/yield)、for...of循环
10. 其他:二进制 / 八进制字面量、Number.isFinite()/Number.isNaN()、Math.trunc()、String.raw()等
# 二、ES2016(ES7)—— 2016 年 6 月(小更新)
阶段跨度:2015→2016,1 年(年度小版本)。
核心新增 API / 特性:
1. 指数运算符:**(如2**3=8,替代Math.pow)
2. 数组包含检测:Array.prototype.includes()(判断元素是否存在)
# 三、ES2017(ES8)—— 2017 年 6 月(异步重大升级)
阶段跨度:2016→2017,1 年。
核心新增 API / 特性:
1. 异步终极方案:async/await(基于 Promise 的同步化异步代码)
2. 对象工具方法:
Object.values()(返回对象值数组)
Object.entries()(返回[key,value]键值对数组)
Object.getOwnPropertyDescriptors()(获取所有属性描述符)
3. 字符串填充:String.prototype.padStart()/padEnd()(首尾补空格 / 字符)
4. 函数参数尾逗号:对象 / 数组 / 函数参数列表允许尾逗号(不报错)
# 四、ES2018(ES9)—— 2018 年 6 月(迭代与正则增强)
阶段跨度:2017→2018,1 年。
核心新增 API / 特性:
1. 异步迭代:async Iterator/for await...of(遍历异步数据源)
2. Promisefinally:Promise.prototype.finally()(无论成功失败都执行)
3. 对象扩展 / 剩余属性:const {a,...rest}=obj、const newObj={...oldObj}
4. 正则增强:
命名捕获组:/(?<name>\\d+)/(通过groups.name获取)
反向断言:(?<=)/(?!)(匹配前后内容)
s标志(.匹配换行符)、u标志增强(Unicode 支持)
# 五、ES2019(ES10)—— 2019 年 6 月(数组 / 对象工具优化)
阶段跨度:2018→2019,1 年。
核心新增 API / 特性:
1. 数组扁平化:Array.prototype.flat()(拉平嵌套数组)/flatMap()(映射 + 扁平化)
2. 对象键值对转换:Object.fromEntries()(把[[k,v]]转对象,与entries互逆)
3. 字符串修剪:String.prototype.trimStart()/trimEnd()(精准去首尾空格)
4. Symbol 描述:Symbol.prototype.description(获取 Symbol 的描述字符串)
5. 可选 catch 绑定:try{}catch{}(无需写err参数)
6. 其他:String.prototype.matchAll()(全局匹配所有结果)、JSON 完全纳入 ES 标准
# 六、ES2020(ES11)—— 2020 年 6 月(安全与语法糖)
阶段跨度:2019→2020,1 年。
核心新增 API / 特性:
1. 可选链:?.(如obj?.a?.b,避免Cannot read property 'b' of undefined)
2. 空值合并:??(如a??b,仅null/undefined时取b,区别于||)
3. 大整数:BigInt(支持任意精度整数,如123n)
4. 全局 this:globalThis(统一浏览器window、Nodeglobal、WebWorkerself)
5. 模块导入增强:import()(动态导入,返回 Promise)
6. Promise.allSettled:Promise.allSettled()(等待所有 Promise 完成,无论成功失败)
# 七、ES2021(ES12)—— 2021 年 6 月(逻辑与字符串优化)
阶段跨度:2020→2021,1 年。
核心新增 API / 特性:
1. 逻辑赋值运算符:&&=/||=/??=(如x&&=y等价于x=x&&y)
2. 字符串全替换:String.prototype.replaceAll()(无需正则即可替换所有匹配项)
3. 数字分隔符:1_000_000(数字中加下划线分隔,提升可读性)
4. Promise.any:Promise.any()(第一个成功的 Promise 返回,全部失败才 reject)
5. 弱引用与销毁:WeakRef(弱引用对象,不阻止 GC)、FinalizationRegistry(对象销毁时回调)
# 八、ES2022(ES13)—— 2022 年 6 月(类与顶层增强)
阶段跨度:2021→2022,1 年。
核心新增 API / 特性:
1. 顶层 await:模块顶层可直接用await(无需包裹 async 函数)
2. 类私有字段 / 方法:#前缀(如#privateField、#privateMethod(),外部不可访问)
3. 类静态块:static{}(类加载时执行一次,用于静态初始化)
4. 相对索引:String.prototype.at()/Array.prototype.at()(支持负数索引,如arr.at(-1)取最后一个元素)
5. 对象自有属性检测:Object.hasOwn()(替代obj.hasOwnProperty(),更简洁安全)
6. 错误原因:Error.prototype.cause(错误对象可关联原始错误,便于排查)
# 九、ES2023(ES14)—— 2023 年 6 月(数组不可变操作)
阶段跨度:2022→2023,1 年。
核心新增 API / 特性:
1. 数组不可变方法(返回新数组,不修改原数组):
2. toReversed():反转数组
3. toSorted():排序数组
4. toSpliced(start,deleteCount,...items):删除 / 插入元素
5. with(index,value):修改指定索引元素
6. 数组反向查找:findLast()/findLastIndex()(从数组末尾向前查找)
# 十、ES2024(ES15)—— 2024 年 6 月(Promise 与分组增强)
阶段跨度:2023→2024,1 年。
核心新增 API / 特性:
1. Promise 简化创建:Promise.withResolvers()(无需包裹 executor 函数,直接获取promise/resolve/reject)
2. 数组分组:Object.groupBy()/Map.groupBy()(按回调条件对数组元素分组)
3. 异步数组转换:Array.fromAsync()(将异步迭代器 / 可迭代对象转为数组)
4. 正则 v 标志:/regex/v(增强 Unicode 属性转义,支持 emoji 等复杂字符)
5. 装饰器(正式版):@decorator(类 / 方法 / 属性装饰器标准化)